import { confirmModal } from '../Modal'
interface CheckChangeProps {
	/**进入该页面时，页面的数据 */
	oldData?: any
	/**离开该页面时，页面的数据 */
	newData?: any
	/**内容修改的提示语 */
	msg?: string
	/**点击内容修改的提示语弹窗的确定按钮的回调 */
	onOk?: Function
	/**确定按钮上的文字，默认是确定 */
	okText?: string
	/**点击内容修改的提示语弹窗的取消按钮的回调 */
	onCancel?: Function
	/**确定按钮是否表示离开，默认true，几乎所有页面确定就是确定离开该页面，只有设置页面反着 */
	saveBtnIsLeave?: boolean
}
/**内容是否已修改，默认没有修改  */
const checkIsChange = ({ oldData, newData }: CheckChangeProps) => {
	/**内容是否已修改，默认没有修改 */
	let isChanged: boolean = false
	if (oldData instanceof Array) {
		// 数据为对象数组的情况
		isChanged = oldData.length !== newData.length
	}
	for (let key in newData) {
		let isInOld = oldData.hasOwnProperty(key)
		if (isInOld) {
			if (newData[key] !== oldData[key]) {
				isChanged = true
				break
			}
		}
	}
	return isChanged
}
const _checkIsLeave = ({
	oldData,
	newData,
	msg,
	onOk,
	onCancel,
	okText = '确定',
	saveBtnIsLeave = true,
}: CheckChangeProps) => {
	return new Promise((resolve, reject) => {
		/**内容是否已修改，默认没有修改 */
		let isLeave: boolean = true
		let _msg = msg || '内容已更改，尚未保存，确定要退出吗？'
		let isChanged = checkIsChange({ oldData, newData })
		if (isChanged) {
			confirmModal({
				msg: _msg,
				okText: okText,
				onOk: () => {
					//离开该页面
					isLeave = saveBtnIsLeave
					resolve(isLeave)
					onOk && onOk()
				},
				onCancel: () => {
					//停留该页面
					isLeave = !saveBtnIsLeave
					resolve(isLeave)
					onCancel && onCancel()
				},
			})
		} else {
			//离开该页面
			isLeave = true
			resolve(isLeave)
		}
	})
}
/**是否离开当前页面，默认是离开的，检验完内容更改后更新是否离开的状态 */
const checkIsLeave = async ({ oldData, newData, msg, onOk, onCancel, okText, saveBtnIsLeave }: CheckChangeProps) => {
	let isLeaveCurrentPage: any = true
	isLeaveCurrentPage = await _checkIsLeave({ oldData, newData, msg, onOk, onCancel, okText, saveBtnIsLeave })

	return isLeaveCurrentPage
}
export { checkIsChange, checkIsLeave }
